home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / tutor.arc / CODE68K.SA < prev    next >
Text File  |  1990-01-05  |  65KB  |  1,964 lines

  1.          TTL       68K ONE LINE ASSEMBLER
  2. CODE68K  IDNT      1,3       68K ONE LINE ASSEMBLER                  07/23/82
  3.          XDEF      CODE68K
  4.          XDEF      ER        USED BY MBSR
  5.  
  6.          XREF      PNT2HX,FRELADDR
  7.          XREF      GETDECNU            .                             1,2
  8.  
  9.          OFFSET    0
  10. ESKB     DS        0
  11. TDATA    DS.B      10
  12. TNB      DS.B      1
  13. TLSPEC   DS.B      1
  14. TLENGTH  DS.W      1
  15. PCOUNTER DS.L      1
  16. PTROP    DS.L      1                   POINTER TO OPERAND
  17. PENDOP   DS.L      1                   POINTER END OF OPERAND
  18. PTRBUFE  DS.L      1                   POINTER TO END OF FORMATED SOURCE
  19. LINK     DS.L      1                   SAVE FOR UNLINK
  20. ESKE     DS.B      0
  21.  
  22.          SECTION   11
  23.  
  24. * EVALUATE EXPRESSION
  25. *  NUMBER PLUS OR MINUS NUMBER....
  26. *
  27. EV       DS        0
  28.          MOVE.L    D7,-(A7)            SAVE D7
  29.          CLR.L     D7
  30. GETEXP21 BSR.S     GETFIELD            GET NUMBER
  31.          ADD.L     D0,D7               D7 = NUMBER BEING BUILT
  32. GETEXP15 MOVE.B    (A5)+,D1            D1 = TERMINATING CHAR
  33.          CLR.L     D0                  D0 = NEXT NUMBER (=0 1ST TIME)
  34.          CMP.B     #'+',D1
  35.          BEQ       GETEXP21            PLUS
  36.          CMP.B     #'-',D1
  37.          BNE.S     GETEXP39            NOT MINUS
  38.          BSR.S     GETFIELD            GET NEXT NUMBER
  39.          SUB.L     D0,D7
  40.          BRA       GETEXP15
  41.  SPC 1
  42. GETEXP39 MOVE.L    D7,D0               D0 = VALUE BUILT
  43.          SUB.L     #1,A5               A5 = CHAR AFTER EXPRESSION
  44.          MOVE.L    (A7)+,D7            RESTORE D7
  45.          RTS
  46.  PAGE
  47. GETFIELD DS        0
  48.          CMP.B     #'*',(A5)
  49.          BNE.S     GETF305
  50.  
  51.          MOVE.L    D4,D0               D0 = PROGRAM COUNTER
  52.          ADD.L     #1,A5
  53.          BRA.S     GETF333
  54.  
  55. GETF305  CMP.B     #$27,(A5)
  56.          BNE.S     GETF325             NOT LITERAL
  57.  
  58.          ADD.L     #1,A5
  59.          CLR.L     D0
  60.  
  61.          MOVE.W    TLENGTH(A1),D1      D1 = SIZE
  62.          BEQ.S     GETF308             .B = 0
  63.          LSR.W     #5,D1               .W = 1
  64.          SUB.L     #1,D1               .L = 3
  65. GETF308
  66.  
  67. GETF311  LSL.L     #8,D0
  68.          MOVE.B    (A5)+,D0
  69.          CMP.B     #$27,(A5)
  70.          BEQ.S     GETF312             CLOSING QUOTE
  71.          DBF       D1,GETF311
  72.          BRA.S     ER1                 OVERFLOW                      1,2
  73.  
  74. GETF312  ADD.L     #1,A5               MOVE PAST CLOSING QUOTE
  75.          BRA.S     GETF314
  76.  
  77. GETF313  LSL.L     #8,D0
  78. GETF314  DBF       D1,GETF313          LEFT NORNALIZE
  79.          BRA.S     GETF333
  80.  
  81. GETF325  BSR       GETDECNU            GET DECIMAL NUMBER            1,2
  82.          BNE.S     ER1                 MESSED UP NUMBER              1,2
  83.  
  84. GETF333  RTS
  85.  
  86. XBASE    DS        0
  87. * FIND AND SET SIZE
  88. * BIT 5432109876543210
  89. *     ........00......  = BYTE
  90. *     ........01......  = WORD
  91. *     ........10......  = LONG
  92. *
  93. FSIZE    OR.W      TLENGTH(A1),D2          SET SIZE BITS
  94.          RTS
  95.  
  96. *  D0 = VALUE 0 - 7
  97. *  D1 = 0 IF D@     = 1 IF A@
  98. GETREGD  CLR.L     D1
  99.          CMP.B     #'D',(A5)+
  100.          BNE.S     ER1                 .                             1,2
  101. GET41    CLR.L     D0
  102.          MOVE.B    (A5)+,D0
  103.          SUB.B     #'0',D0
  104.          BMI.S     ER1                 .                             1,2
  105.          CMP.B     #$7,D0
  106.          BGT.S     ER1                 .                             1,2
  107.          RTS
  108.  
  109. GETREGA  CLR.L     D1
  110.          MOVE.B    #8,D1
  111.          CMP.B     #'A',(A5)+
  112.          BNE.S     ER1                 .                             1,2
  113.          BRA       GET41
  114.  
  115. GETREGAD CLR       D1
  116.          MOVE.B    (A5)+,D0
  117.          CMP.B     #'D',D0
  118.          BEQ       GET41
  119.          MOVE.B    #8,D1
  120.          CMP.B     #'A',D0
  121.          BEQ       GET41
  122. ER1      BRA       ER                  .                             1,2
  123.  PAGE
  124. EADA     MOVE.W    #$1FD,D7            DATA ALTERABLE ONLY
  125.          BRA.S     EA
  126.  SPC 1
  127. EAC      MOVE.W    #$7E4,D7            CONTROL ONLY
  128.          BRA.S     EA
  129.  SPC 1
  130. EAM      MOVE.W    #$1FC,D7            MEMORY ALTERABLE ONLY
  131.          BRA.S     EA
  132.  SPC 1
  133. EAZ      MOVE.W    #$800,D7            IMMEDIATE ONLY
  134.          BRA.S     EA
  135.  
  136. EADADDR  MOVE.W    #$FFD,D7  DATA ADDRESSING
  137.          BRA.S     EA
  138.  
  139. EAA      MOVE.W    #$1FF,D7            ALTERABLE ADDRESSING
  140.          BRA.S     EA
  141.  
  142. EAALL    MOVE.W    #$FFF,D7  ALL MODES
  143.  SPC 4
  144. *  ...............1  D@                DATA REGISTER
  145. *  ..............1.  A@
  146. *  .............1..  (A@)
  147. *  ............1...  -(A@)
  148. *  ...........1....  (A@)+
  149. *  ..........1.....  DATA(A@)
  150. *  .........1......  DATA(A@,R@)
  151. *  ........1.......  DATA  (SHORT)
  152. *  .......1........  DATA  (LONG)
  153. *  ......1.........  DATA(PC)
  154. *  .....1..........  DATA(PC,R@)
  155. *  ....1...........  #DATA
  156. *  1...............  SPECIAL CASE JMP.L
  157.  PAGE
  158. * D0 = VALUE CALCULATED
  159. * D2 = MASK WORD (1ST WORD OF INSTRUCTION)
  160. * D3 = OFFSET FOR DATA STORE (TDATA+..)
  161. * D4 = EXTENSION WORD
  162. * D5 = <DATA>
  163. * D6 = MODE AS BUILT   .........XXXXXX
  164. * D7 = MODES ALLOWED
  165. *
  166. * A4 = BASE ADDRESS FOR DATA STORE (TDATA+..)[A4,D3]
  167. EA       DS        0
  168.          CLR.L     D5                  ZERO VALUE
  169.          CLR.L     D6                  MODE = 000000
  170.          MOVE.B    (A5),D0
  171.          CMP.B     #'#',D0
  172.          BNE.S     EA10
  173.  
  174. * IMMEDIATE MODE
  175.          BTST      #11,D7
  176.          BEQ       ER1                 .                             1,2
  177.  
  178.          MOVE.B    #$3C,D6             D6 = MODE  111100
  179.          ADD.L     #1,A5
  180.  
  181.          BSR       EV                  EVALUATE EXPRESSION
  182.          MOVE.L    D0,D5               D5 = VALUE
  183.  
  184.          TST.B     TLSPEC(A1)          .                             1,3
  185.          BEQ.S     EA0633              .SIZE NOT SPECIFIED (.W ASSUMED)
  186.  
  187.          MOVE.W    TLENGTH(A1),D0
  188.          BEQ.S     EA0635              .BYTE
  189.  
  190.          TST.B     D0
  191.          BMI.S     EA0637              .LONG
  192.  
  193. EA0633   BSR       EA16BIT             .WORD     -32K TO +64K
  194. EA0634   MOVE.W    D5,(A4,D3)
  195.          ADD.B     #2,TNB(A1)          BYTE COUNT
  196.          ADD.L     #2,D3               OFFSET
  197.          RTS
  198.  
  199. EA0635   BSR       EA8BIT              -127 TO +255
  200.          BNE       ER1
  201.          BRA       EA0634
  202.  
  203. EA0637   MOVE.L    D5,(A4,D3)
  204.          ADD.B     #4,TNB(A1)
  205.          ADD.L     #4,D3
  206.          RTS
  207.  PAGE
  208. EA10     DS        0
  209.          CMP.B     #'-',(A5)
  210.          BNE.S     EA11
  211.  
  212.          CMP.B     #'(',1(A5)
  213.          BNE       EA41                MAY BE "-<DATA>
  214.  
  215.          ADD.L     #2,A5
  216.          MOVE.W    #$0020,D6           MODE = -(A@)    100AAA
  217.  
  218.          BTST      #4,D7
  219.          BEQ       ER1                 THIS MODE NOT ALLOWED         1,2
  220.  
  221.          BSR       GETREGA
  222.          OR.W      D0,D6
  223.  
  224.          CMP.B     #')',(A5)+
  225.          BNE.S     ER3                 NO CLOSING PARIN              1,2
  226.          RTS
  227.  
  228. EA11     CMP.B     #'A',D0
  229.          BNE.S     EA21
  230.  
  231.          MOVE.B    #$08,D6             MODE = 001...
  232.          BTST      #1,D7
  233.          BEQ.S     ER3                 MODE NOT ALLOWED              1,2
  234.  
  235.          BSR       GETREGA
  236.          OR.W      D0,D6
  237.          RTS
  238.  
  239. EA21     CMP.B     #'D',D0
  240.          BNE.S     EA31
  241.  
  242.          BTST      #0,D7
  243.          BEQ.S     ER3                 MODE NOT ALLOWED              1,2
  244.  
  245.          BSR       GETREGD             MODE = D@   000AAA
  246.          OR.W      D0,D6
  247.          RTS
  248.  PAGE
  249. EA31     CMP.B     #'(',D0
  250.          BNE.S     EA41
  251.  
  252. * POSSIBLE
  253. *  (A@)
  254. *  (A@)+
  255. *  (A@,R@)  IMPLIED ZERO DISPLACEMENT
  256. *
  257.          ADD.L     #1,A5
  258.          BSR       GETREGA
  259.          OR.W      D0,D6
  260.  
  261.          MOVE.B    (A5)+,D0
  262.          CMP.B     #',',D0
  263.          BEQ       EA5116              MODE = (A@,R@)  ;IMPLIED D5 = 0 DATA
  264.  
  265.          CMP.B     #')',D0             LOOK FOR CLOSING )
  266.          BNE.S     ER3                 .                             1,2
  267.  
  268.          CMP.B     #' ',(A5)           LOOK FOR BLANK
  269.          BEQ.S     EA35                MODE = (A@)
  270.  
  271.          CMP.B     #'+',(A5)
  272.          BNE.S     EA35
  273.          ADD.L     #1,A5
  274.  
  275.          OR.W      #$18,D6   MODE = 011...    (A@)+
  276.  
  277.          BTST      #3,D7
  278.          BEQ.S     ER3                 MODE NOT ALLOWED              1,2
  279.  
  280. EA34     RTS                           .                             1,2
  281.  
  282. EA35     OR.W      #$10,D6             MODE = 010...   (A@)
  283.  
  284.          BTST      #2,D7
  285.          BNE       EA34                MODE ALLOWED                  1,2
  286. ER3      BRA       ER                  MODE NOT ALLOWED              1,2
  287.  PAGE
  288. * POSSIBLE
  289. *   <DATA>   SHORT
  290. *   <DATA>   LONG
  291. *   <DATA>(A@)
  292. *   <DATA>(A@,R@)
  293. *   <DATA>(A@,R@.W)
  294. *   <DATA>(A@,R@.L)
  295. *   <DATA>(PC)
  296. *   <DATA>(PC,R@)
  297. *   <DATA>(PC,R@.W)
  298. *   <DATA>(PC,R@.L)
  299. *
  300. EA41     BSR       EV                  EVALUATE EXPRESSION
  301.          MOVE.L    D0,D5               D5 = <DATA>
  302.  
  303.          MOVE.B    (A5),D0
  304.          CMP.B     #',',D0
  305.          BEQ.S     EA4102
  306.          CMP.B     #' ',D0
  307.          BNE.S     EA4120
  308.  
  309. *  <DATA>         ONLY
  310. * CHECK IF NEGATIVE NUMBER
  311. EA4102   MOVE.L    D5,D0
  312.          BPL.S     EA4105              POSITIVE NUMBER
  313.          NOT.L     D0                  .                             1,3
  314. EA4105   AND.W     #$8000,D0           .                             1,3
  315.          TST.L     D0
  316.          BNE.S     EA4135              .LONG
  317.  
  318. *  <DATA>.W
  319.          BTST      #7,D7
  320.          BNE.S     EA4127              SHORT ALLOWED                 1,1
  321.          BTST      #15,D7              .                             1,1
  322.          BEQ       ER3                 MODE NOT ALLOWED              1,2
  323.          BRA.S     EA4135              SPECIAL CASE (JMP.L)          1,1
  324.  
  325. EA4127   OR.W      #$38,D6             EA = ABSOULTE SHORT           1,1
  326.          MOVE.W    D5,(A4,D3)          D5 = DATA
  327.          ADD.B     #2,TNB(A1)          BYTE COUNT
  328.          ADD.L     #2,D3
  329.          RTS
  330.  
  331. *EA4134   CMP.B     #'L',D0
  332. *        BNE       ER3                 .                             1,2
  333.  
  334. *  <DATA>.L
  335. EA4135   OR.W      #$39,D6             EA = ABSOLUTE LONG
  336.          MOVE.L    D5,(A4,D3)
  337.          ADD.B     #4,TNB(A1)          BYTE COUNT
  338.          ADD.L     #4,D3
  339.          BTST      #8,D7
  340.          BEQ       ER3                 MODE NOT ALLOWED              1,2
  341.          RTS
  342.  
  343. EA4120   ADD.L     #1,A5               .                             1,3
  344.          CMP.B     #'(',D0             .                             1,3
  345.          BNE       ER3                 .                             1,2
  346.  
  347.          CMP.B     #'P',(A5)
  348.          BEQ       EA61
  349.  
  350. * <DATA>(A@.......
  351.          BSR       EA16BITS            -32K TO +32K
  352.  
  353.          BSR       GETREGA
  354.          OR.W      D0,D6
  355.  
  356.          MOVE.B    (A5),D0
  357.          CMP.B     #')',D0
  358.          BNE.S     EA5115
  359.  
  360. * <DATA>(A@)
  361.          ADD.L     #1,A5
  362.  
  363.          BTST      #5,D7
  364.          BEQ       ER4                 MODE NOT ALLOWED              1,2
  365.  
  366.          OR.W      #$0028,D6           MODE = 101AAA
  367.  
  368.          CMP.L     #$10000,D5
  369.          BPL       ER4                 .                             1,2
  370.  
  371.          MOVE.W    D5,(A4,D3)
  372.          ADD.B     #2,TNB(A1)
  373.          ADD.L     #2,D3
  374.          RTS
  375.  PAGE
  376. EA5115   BSR       COMMA
  377.  
  378. *  <DATA>(A@,-----    ADDRESS REGISTER WITH INDEX
  379. EA5116   EXT.L     D5
  380.          BSR       EA8BITS             -128 TO +127
  381.          BNE.S     ER4                 .                             1,2
  382.          AND.W     #$00FF,D5
  383.          OR.W      #$0030,D6           MODE  110---
  384.  
  385.          BTST      #6,D7
  386.          BEQ.S     ER4                 MODE NOT ALLOWED              1,2
  387.  
  388.          BSR       GETREGAD
  389.          OR.W      D1,D0
  390.          ROR.W     #4,D0
  391.          OR.W      D0,D5               EXTENSION WORD
  392.  
  393. * BIT 11 EXTENSION WORD
  394. *   0 = SIGN EXTENDED, LOW ORDER INTEGER IN INDEX REGISTER
  395. *   1 = LONG VALUE IN INDEX REGISTER  (DEFAULT)
  396. *
  397.          MOVE.B    (A5)+,D0
  398.          CMP.B     #')',D0
  399.          BEQ.S     EA5119              DEFAULT   .W
  400.  
  401.          CMP.B     #'.',D0
  402.          BNE.S     ER4                 .                             1,2
  403.  
  404.          MOVE.B    (A5)+,D0
  405.          CMP.B     #'W',D0
  406.          BEQ.S     EA5118
  407.  
  408.          CMP.B     #'L',D0
  409.          BNE.S     ER4                 NEITHER .W NOR .L             1,2
  410.  
  411.          OR.W      #$0800,D5           EXTENSION WORD, W/L BIT = .L
  412.  
  413. EA5118   CMP.B     #')',(A5)+
  414.          BNE.S     ER4                 NO CLOSING ")"                1,2
  415.  
  416. EA5119   MOVE.W    D5,(A4,D3)
  417.          ADD.B     #2,TNB(A1)
  418.          ADD.L     #2,D3
  419. EA5119E  RTS                           .                             1,2
  420.  PAGE
  421. *  <DATA>(P-----
  422. EA61     ADD.L     #1,A5
  423.          CMP.B     #'C',(A5)+
  424.          BNE       ER
  425.  
  426.          SUB.L     PCOUNTER(A1),D5     D5 = D5 - PC
  427.          SUB.L     #2,D5               D5 = D5 - (PC + 2)
  428.  
  429.          MOVE.B    (A5)+,D0
  430.          CMP.B     #')',D0
  431.          BNE.S     EA71
  432.  
  433. *  <DATA>(PC)
  434.          OR.W      #$3A,D6             MODE = 111010
  435.  
  436.          BSR.S     EA16BITS            -32K TO +32K
  437.          MOVE.W    D5,(A4,D3)
  438.          ADD.B     #2,TNB(A1)
  439.          ADD.L     #2,D3
  440.  
  441.          BTST      #9,D7
  442.          BNE       EA5119E             .                             1,2
  443. ER4      BRA       ER                  .                             1,2
  444.  
  445. *  <DATA>(PC----          PROGRAM COUNTER WITH INDEX
  446. EA71     MOVE.W    #$003B,D6           MODE = 111011
  447.  
  448.          CMP.B     #',',D0
  449.          BNE       ER4                 .                             1,2
  450.  
  451.          BTST      #10,D7
  452.          BEQ       ER4                 MODE NOT ALLOWED              1,2
  453.  
  454.          BSR.S     EA8BITS             -128 TO +127
  455.          BNE       ER4                 .                             1,2
  456.  
  457.          AND.W     #$00FF,D5           D5 = VALUE
  458.          BSR       GETREGAD
  459.          OR.W      D1,D0
  460.  
  461.  
  462.          ROR.W     #4,D0
  463.          OR.W      D0,D5               D5 = EXTENSION WORD
  464.  
  465.          MOVE.B    (A5)+,D0
  466.          CMP.B     #')',D0
  467.          BEQ.S     EA7115              DEFAULT  .W
  468.  
  469.          CMP.B     #'.',D0
  470.          BNE       ER4                 .                             1,2
  471.  
  472.          MOVE.B    (A5)+,D0
  473.          CMP.B     #'W',D0
  474.          BEQ.S     EA7113
  475.  
  476.          CMP.B     #'L',D0
  477.          BNE       ER4                 .                             1,2
  478.          OR.W      #$0800,D5           EXTENSION WORD W/L = .L
  479.  
  480. EA7113   CMP.B     #')',(A5)+
  481.          BNE       ER4                 NO CLOSING ")"                1,2
  482.  
  483. EA7115   MOVE.W    D5,(A4,D3)
  484.          ADD.B     #2,TNB(A1)
  485.          ADD.L     #2,D3
  486.          RTS
  487.  PAGE
  488. ****************************************************************************
  489. *
  490. *        ROUTINES TO TEST FOR VALID EFFECTIVE ADDRESSES
  491. *
  492. *        EA16BIT   tests that -32768 <= D5 <= 65535.  (signed or unsigned)
  493. *        EA16BITS  tests that -32768 <= D5 <= 32767.  (signed only)
  494. *        EA8BIT    tests that   -128 <= D5 <=   255.  (signed or unsigned)
  495. *        EA8BITS   tests that   -128 <= D5 <=   127.  (signed only)
  496. *
  497. *        The 16-bit tests branch to ER if invalid, else return.
  498. *        The  8-bit tests return condition codes <EQ> if valid, else <NE>.
  499. *        D5 is preserved unless a branch to ER results.
  500. *        D1 is destroyed.
  501. *
  502. ****************************************************************************
  503.  
  504. EA16BIT:
  505.          BSR.S     EA16BITC            CHECK RANGE -32768 TO 32767.  IF
  506.          MOVE.L    D5,D1               INVALID, CHECK WHETHER THE HIGH 16
  507.          SWAP      D1                  BITS ARE 0 (WHICH IMPLIES THAT
  508.          TST.W     D1                  D5 <= 65535).  IF NOT, FALL THRU TO
  509.          BEQ.S     EASEX               THE 16-BIT SIGNED TEST--WE WILL
  510. *                                       FAIL AND GO TO ER.
  511.  
  512. EA16BITS:
  513.          PEA       ER(PC)              SET UP TO RETURN TO ER IF INVALID.
  514.  
  515. EA16BITC MOVE.L    #$7FFF,D1           D1  <--  2^16-1.
  516.          BRA.S     EAS                 GO TO THE COMMON TEST ROUTINE.
  517.  
  518.  
  519. EA8BIT:
  520.          BSR.S     EA8BITC             CHECK RANGE -128 TO 127.  IF INVALID,
  521.          MOVE.L    D5,D1               CHECK WHETHER THE HIGH 24 BITS ARE
  522.          LSR.L     #8,D1               0 (WHICH IMPLIES THAT D5 <= 255).
  523.          RTS                           *
  524.  
  525. EA8BITS:
  526.          BSR.S     EA8BITC             JUST CHECK FOR -127 <= D5 <= 128.
  527.          RTS                           (BSR PUTS NEEDED ADDRESS ON STACK!)
  528.  
  529. EA8BITC  MOVE.L    #$7F,D1             D1  <--  2^8 - 1.
  530.  
  531. *                  *** NOTE: THIS ROUTINE PLAYS WITH THE STACK ***
  532. EAS      CMP.L     D1,D5               IF D5 > 2^N-1, RETURN WITH <NE> (INVAL).
  533.          BGT.S     EASEX               *
  534.          NOT.L     D1                  IF D5 < -2^N,  RETURN WITH <NE> (INVAL).
  535.          CMP.L     D1,D5               *
  536.          BLT.S     EASEX               *
  537.  
  538.          ADD.L     #4,A7               POP THE RETURN ADDRESS OFF THE STACK,
  539.          CLR.L     D1                  SET <EQ> (VALID), AND RETURN.
  540.  
  541. EASEX    RTS                           *
  542.  PAGE
  543. ADR      MACRO
  544.          DC.W      M\1-XBASE
  545.          ENDM
  546.  
  547. TBLKEYS  DS        0         INDEX
  548.          ADR       ABCD      0  ABCD SBCD
  549.          ADR       ADD       1  ADD  SUB
  550.          ADR       ADDA      2  ADDA CMPA SUBA
  551.          ADR       ADDI      3  ADDI CMPI SUBI
  552.          ADR       ADDQ      4  ADDQ SUBQ
  553.          ADR       ADDX      5  ADDX SUBX
  554.          ADR       AND       6  AND  EOR OR
  555.          ADR       ASL       7  ASL  LSL ROL ROXL
  556.          ADR       DBCC      8  DBCC
  557.          ADR       BCHG      9  BCHG
  558.          ADR       BRA       10  BRA  BSR  BCC
  559.          ADR       BSET      11  BSET
  560.          ADR       CHK       12  CHK  DIVS DIVU MILS MULU
  561.          ADR       CLR       13  CLR NEG NEGX NOT TST
  562.          ADR       CMPM      14  CMPM
  563.          ADR       MOVEQ     15  MOVEQ
  564.          ADR       EXG       16  EXG
  565.          ADR       EXT       17  EXT
  566.          ADR       JMP       18  JMP  JSR
  567.          ADR       LEA       19  LEA
  568.          ADR       LINK      20  LINK
  569.          ADR       MOVE      21  MOVE
  570.          ADR       CMMD2     22  NOP RESET RTE RTR RTS TRAPV
  571.          ADR       STOP      23  STOP
  572.          ADR       SWAP      24  SWAP
  573.          ADR       TRAP      25  TRAP
  574.          ADR       UNLK      26  UNLK
  575.          ADR       MOVEM     27  MOVEM
  576.          ADR       ANDI      28  ANDI EORI ORI
  577.          ADR       SCC       29  NBCD SCC TAS
  578.          ADR       BCLR      30  BCLR
  579.          ADR       BTST      31  BTST
  580.          ADR       MOVEA     32  MOVEA
  581.          ADR       MOVEP     33  MOVEP
  582.          ADR       CMP       34  CMP
  583.          ADR       EOR       35  EOR
  584.          ADR       PEA       36  PEA
  585.          ADR       DC        37  DC.W
  586.  
  587.          PAGE
  588. * \1,\2 = MNEUMONIC (\2 SIGN BIT SET AS LAST CHARACTER)
  589. * \3    = INDEX TO TABLKEYS
  590. * \4,\5 = FIRST WORD MASK
  591. * \6    = NO OPERAND ALLOWED IF SIGN SET
  592. * \7    = .S ALLOWED (.W NOT ALLOWED)                                1,2
  593. OPC      MACRO
  594.          DC.B      '\1','\2'+128
  595.          DC.B      \3+\6+\7,$\4,$\5
  596.          ENDM
  597.  
  598. NOC      EQU       128                 (BIT 7 SET) NO OPERAND
  599. NW       EQU       $40                 (BIT 6 SET) .W NOT ALLOWED    1,2
  600. TBLOPC   OPC       ABC,D,0,C1,00,0,0     ABCD
  601.          OPC       ADD,A,2,D0,C0,0,0     ADDA
  602.          OPC       ADD,I,3,06,00,0,0     ADDI
  603.          OPC       ADD,Q,4,50,00,0,0     ADDQ
  604.          OPC       ADD,X,5,D1,00,0,0     ADDX
  605.          OPC       AD,D,1,D0,00,0,0      ADD
  606.          OPC       AND,I,28,02,00,0,0    ANDI
  607.          OPC       AN,D,6,C0,00,0,0      AND
  608.          OPC       AS,L,7,E1,00,0,0      ASL
  609.          OPC       AS,R,07,E0,00,0,0     ASR
  610.          OPC       BR,A,10,60,00,0,NW    BRA
  611.          OPC       BH,I,10,62,00,0,NW      BHI
  612.          OPC       BL,S,10,63,00,0,NW      BLS
  613.          OPC       BC,C,10,64,00,0,NW      BCC
  614.          OPC       BC,S,10,65,00,0,NW      BCS
  615.          OPC       BN,E,10,66,00,0,NW      BNE
  616.          OPC       BE,Q,10,67,00,0,NW      BEQ
  617.          OPC       BV,C,10,68,00,0,NW      BVC
  618.          OPC       BV,S,10,69,00,0,NW      BVS
  619.          OPC       BP,L,10,6A,00,0,NW      BPL
  620.          OPC       BM,I,10,6B,00,0,NW      BMI
  621.          OPC       BG,E,10,6C,00,0,NW      BGE
  622.          OPC       BL,T,10,6D,00,0,NW      BLT
  623.          OPC       BG,T,10,6E,00,0,NW      BGT
  624.          OPC       BL,E,10,6F,00,0,NW      BLE
  625.          OPC       BCH,G,9,01,40,0,0     BCHG
  626.          OPC       BCL,R,30,01,80,0,0    BCLR      DYNAMIC
  627.          OPC       BSE,T,11,01,C0,0,0    BSET
  628.          OPC       BS,R,10,61,00,0,NW    BSR
  629.          OPC       BTS,T,31,01,00,0,0    BTST
  630.          OPC       B,T,10,60,00,0,NW      BT
  631.          OPC       CH,K,12,41,80,0,0     CHK
  632.          OPC       CL,R,13,42,00,0,0     CLR
  633.          OPC       CMP,A,2,B0,C0,0,0     CMPA
  634.          OPC       CMP,I,3,0C,00,0,0     CMPI                          1,1
  635.          OPC       CMP,M,14,B1,08,0,0    CMPM
  636.          OPC       CM,P,34,B0,00,0,0      CMP
  637.          OPC       DB,T,8,50,C8,0,NW     DBT
  638.          OPC       DB,F,8,51,C8,0,NW     DBF
  639.          OPC       DBR,A,8,51,C8,0,NW    DBRA
  640.          OPC       DBH,I,8,52,C8,0,NW    DBHI
  641.          OPC       DBL,S,8,53,C8,0,NW    DBLS
  642.          OPC       DBC,C,8,54,C8,0,NW    DBCC
  643.          OPC       DBC,S,8,55,C8,0,NW    DBCS
  644.          OPC       DBN,E,8,56,C8,0,NW    DBNE
  645.          OPC       DBE,Q,8,57,C8,0,NW    DBEQ
  646.          OPC       DBV,C,8,58,C8,0,NW    DBVC
  647.          OPC       DBV,S,8,59,C8,0,NW    DBVS
  648.          OPC       DBP,L,8,5A,C8,0,NW    DBPL
  649.          OPC       DBM,I,8,5B,C8,0,NW    DBMI
  650.          OPC       DBG,E,8,5C,C8,0,NW    DBGE
  651.          OPC       DBL,T,8,5D,C8,0,NW    DBLT
  652.          OPC       DBG,T,8,5E,C8,0,NW    DBGT
  653.          OPC       DBL,E,8,5F,C8,0,NW    DBLE
  654.          OPC       DC.,W,37,00,00,0,0    DC.W  (WORD ONLY)
  655.          OPC       DIV,S,12,81,C0,0,0    DIVS
  656.          OPC       DIV,U,12,80,C0,0,0    DIVU
  657.          OPC       EOR,I,28,0A,00,0,0    EORI
  658.          OPC       EO,R,35,B1,00,0,0      EOR
  659.          OPC       EX,G,16,C1,00,0,0     EXG
  660.          OPC       EX,T,17,48,00,0,0     EXT
  661.          OPC       JM,P,18,4E,C0,0,NW    JMP
  662.          OPC       JS,R,18,4E,80,0,NW    JSR
  663.          OPC       LE,A,19,41,C0,0,0     LEA
  664.          OPC       LIN,K,20,4E,50,0,0    LINK
  665.          OPC       LS,L,7,E3,08,0,0      LSL
  666.          OPC       LS,R,07,E2,08,0,0     LSR
  667.          OPC       MOVE,A,32,00,04,0,0   MOVEA
  668.          OPC       MOVE,M,27,48,80,0,0   MOVEM
  669.          OPC       MOVE,P,33,01,08,0,0   MOVEP
  670.          OPC       MOVE,Q,15,70,00,0,0   MOVEQ
  671.          OPC       MOV,E,21,00,00,0,0    MOVE
  672.          OPC       MUL,S,12,C1,C0,0,0    MULS
  673.          OPC       MUL,U,12,C0,C0,0,0    MULU
  674.          OPC       NBC,D,29,48,0,0,0     NBCD
  675.          OPC       NEG,X,13,40,00,0,0    NEGX
  676.          OPC       NE,G,13,44,00,0,0     NEG
  677.          OPC       NO,P,22,4E,71,NOC,0   NOP
  678.          OPC       NO,T,13,46,00,0,0     NOT
  679.          OPC       OR,I,28,00,00,0,0     ORI
  680.          OPC       O,R,6,80,00,0,0       OR
  681.          OPC       PE,A,36,48,40,0,0     PEA
  682.          OPC       RESE,T,22,4E,70,NOC,0 RESET
  683.          OPC       RO,L,7,E7,18,0,0      ROL
  684.          OPC       RO,R,07,E6,18,0,0     ROR
  685.          OPC       ROX,L,7,E5,10,0,0     ROXL
  686.          OPC       ROX,R,07,E4,10,0,0    ROXR
  687.          OPC       RT,E,22,4E,73,NOC,0   RTE
  688.          OPC       RT,R,22,4E,77,NOC,0   RTR
  689.          OPC       RT,S,22,4E,75,NOC,0   RTS
  690.          OPC       SBC,D,0,81,00,0,0     SBCD
  691.          OPC       S,F,29,51,C0,0,0      SF
  692.          OPC       SH,I,29,52,C0,0,0     SHI
  693.          OPC       SL,S,29,53,C0,0,0     SLS
  694.          OPC       SC,C,29,54,C0,0,0     SCC
  695.          OPC       SC,S,29,55,C0,0,0     SCS
  696.          OPC       SN,E,29,56,C0,0,0     SNE
  697.          OPC       SE,Q,29,57,C0,0,0     SEQ
  698.          OPC       SV,C,29,58,C0,0,0     SVC
  699.          OPC       SV,S,29,59,C0,0,0     SVS
  700.          OPC       SP,L,29,5A,C0,0,0     SPL
  701.          OPC       SM,I,29,5B,C0,0,0     SMI
  702.          OPC       SG,E,29,5C,C0,0,0     SGE
  703.          OPC       SL,T,29,5D,C0,0,0     SLT
  704.          OPC       SG,T,29,5E,C0,0,0     SGT
  705.          OPC       SL,E,29,5F,C0,0,0     SLE
  706.          OPC       STO,P,23,4E,72,0,0    STOP
  707.          OPC       S,T,29,50,C0,0,0      ST
  708.          OPC       SUB,A,2,90,C0,0,0     SUBA
  709.          OPC       SUB,I,3,04,00,0,0     SUBI
  710.          OPC       SUB,Q,4,51,00,0,0     SUBQ
  711.          OPC       SUB,X,5,91,00,0,0     SUBX
  712.          OPC       SU,B,1,90,00,0,0      SUB
  713.          OPC       SWA,P,24,48,40,0,0    SWAP
  714.          OPC       TA,S,29,4A,C0,0,0     TAS                         1,2
  715.          OPC       TRAP,V,22,4E,76,NOC,0 TRAPV
  716.          OPC       TRA,P,25,4E,40,0,0    TRAP
  717.          OPC       TS,T,13,4A,00,0,0     TST
  718.          OPC       UNL,K,26,4E,58,0,0    UNLK
  719. TBLOPCE  DS        0
  720.  PAGE
  721. * WITHOUT LABEL FIELD
  722. * 012345678901234567890123456789012345678901234567890
  723. * AAAAAA DDDDDDDDDDDDDDDDDDDD OPCODE  OPERAND
  724. *        FDATA                FOC     FOP
  725.  
  726. * 012345678901234567890123456789012345678901234567890
  727. * AAAAAA DDDDDDDDDDDDDDDDDDDD LLLLLLLL OPCODE  OPERAND
  728. *        FDATA                FOL      FOC     FOP
  729.  
  730. * A3 = STORE POINTER
  731. * A4 = PROGRAM COUNTER
  732. * A5 = SOURCE PTR BEGINNING
  733. * A6 = SOURCE PTR END+1
  734. *
  735. OUTBSIZE EQU       80        BUFFER SIZE
  736. FDATA    EQU       10        OFFSET TO DATA
  737. FOL      EQU       31        OFFSET TO LABEL
  738. FOC      EQU       31        OFFSET TO OP-CODE (NO LABEL FIELD)
  739. FOP      EQU       39        OFFSET TO OPERAND (NO LABEL FIELD)
  740.  
  741. CODE68K  LINK      A1,#0-(ESKE-ESKB)
  742.          MOVE.L    A1,LINK(A7)         SAVE LINKAGE
  743.          MOVE.L    A7,A1               A1 = BASE REGISTER TO DATA
  744.  
  745.          MOVE.B    #' ',(A6)           INSURE LAST CHAR IS SPACE
  746.  
  747.          MOVE.L    A3,A0
  748.          MOVE.L    #OUTBSIZE-1,D0
  749. M300     MOVE.B    #' ',(A0)+          SPACE FILL BUFFER
  750.          DBRA      D0,M300
  751.          SUB.L     #2,A0
  752.          MOVE.L    A0,PTRBUFE(A1)      PTR TO END OF BUFFER
  753.  
  754.          MOVE.L    A4,PCOUNTER(A1)     FORMAT PC
  755.          MOVE.L    A4,D4               D4 = P-COUNTER
  756.          MOVE.L    A4,D0
  757.  
  758.          MOVE.L    A6,-(A7)            SAVE A6                       1,1
  759.          MOVE.L    A3,A6
  760.          BSR       FRELADDR            FORM RELATIVE ADDRESS
  761.          MOVE.L    (A7)+,A6            RESTORE A6                    1,1
  762.  
  763.          MOVE.L    #1,D7               POSSIBLE ERROR CODE
  764.          MOVE.L    A4,D0
  765.          ROR.L     #1,D0
  766.          BMI       ERDONE              PC ODD ADDRESS
  767.  
  768.          MOVE.L    #FOL,D7             POSSIBLE ERROR CODE
  769.          CMP.B     #' ',(A5)+
  770.          BNE       ERDONE              1ST CHAR NOT SPACE
  771.  
  772.          MOVE.B    #2,TNB(A1)          INZ # OF BYTES
  773.          MOVE.W    #$40,TLENGTH(A1)    SIZE = .W (DEFAULT)
  774.          CLR.B     TLSPEC(A1)          DEFAULT (SIZE NOT SPECIFIED)
  775.  
  776.          MOVE.L    A3,A0               A0 = STORE ADDRESS
  777.          ADD.L     #FOC,A0
  778.  
  779. M340     BSR       GETCHARF            GET PAST SPACES               1,1
  780.          CMP.B     #' ',D0
  781.          BEQ       M340
  782.  
  783.          SUB.L     #1,A5               FORMAT OP-CODE
  784. M350     BSR       GETCHARF            .                             1,1
  785.          MOVE.B    D0,(A0)+
  786.          CMP.B     #'.',D0
  787.          BNE.S     M352
  788.  
  789.          MOVE.B    (A5),TLSPEC(A1)     NOT DEFAULT                   1,2
  790.          CMP.B     #'W',(A5)
  791.          BEQ.S     M352
  792.          CMP.B     #'S',(A5)
  793.          BEQ.S     M352                .SHORT = .WORD
  794.          CLR.W     TLENGTH(A1)
  795.          CMP.B     #'B',(A5)
  796.          BEQ.S     M352                SIZE = .W
  797.          MOVE.W    #$80,TLENGTH(A1)
  798.          CMP.B     #'L',(A5)
  799.          BNE       ERF                 .                             1,1
  800.  
  801. M352     CMP.B     #' ',D0
  802.          BNE       M350                NOT SPACE CONTINUE
  803.  
  804. * SEARCH OP-CODE TABLE
  805.          LEA       TBLOPC(PC),A0       A0 = PTR TO TABLE OF CODES
  806. M410     MOVE.L    A3,A2               A3 = START OF STORE BUFFER
  807.          ADD.L     #FOC,A2             A2 = PTR TO OP-CODE JUST FORMATTED
  808.  
  809. M415     MOVE.B    (A0)+,D0            XXXXXXDD
  810.          EXT.W     D0                  XXXXSSDD  SIGN EXTENDED
  811.          AND.B     #$7F,D0
  812.          CMP.B     (A2)+,D0
  813.          BNE.S     M420                NON-MATCH
  814.          TST.W     D0
  815.          BPL       M415                SIGN RESET; CONTINUE
  816.          BRA.S     M430                MATCH COMPLETE
  817.  
  818. M420     TST.W     D0                  SEQUENCE TO NEXT CODE
  819.          BMI.S     M426
  820. M424     MOVE.B    (A0)+,D0
  821.          BPL       M424                FINISH THIS OP-CODE
  822. M426     ADD.L     #3,A0               ADJUST PTR TO TABLE
  823.          LEA       TBLOPCE(PC),A2
  824.          CMP.L     A0,A2
  825.          BNE       M410
  826.  
  827. M428     MOVE.L    #FOC,D7             ERROR CODE
  828.          BRA       ERDONE
  829.  
  830. * GET GOTO INDEX
  831. * GET FIRST WORD MASK
  832. M430     MOVE.B    (A2),D0             MUST TERMINATE OP-CODE
  833.          CMP.B     #' ',D0             WITH SPACE OR PERIOD
  834.          BEQ.S     M432
  835.          CMP.B     #'.',D0
  836.          BNE       M428                ERROR
  837. M432
  838.  
  839.          CLR.L     D0
  840.          MOVE.B    (A0)+,D0            D0 =  KEYS  INDEX
  841.          MOVE.B    D0,D1               D1 =  KEYS (INDEX)
  842.          AND.B     #$3F,D0             D0 =        INDEX             1,2
  843.          ASL.L     #1,D0               INDEX * TWO                   1,2
  844.          MOVE.B    (A0)+,D2
  845.          LSL.W     #8,D2
  846.          MOVE.B    (A0)+,D2            D2 = FIRST WORD MASK
  847.          MOVE.W    D2,TDATA(A1)
  848.  
  849. * INSURE .S .W MATCH OP-CODE                                         1,2
  850.          MOVE.B    TLSPEC(A1),D3       D3 = .n SPECIFIED             1,2
  851.          BEQ.S     M4326               NOT SPECIFIED                 1,2
  852.          BTST      #6,D1               .                             1,2
  853.          BEQ.S     M4324               .W ALLOWED (.S NOT ALLOWED)   1,2
  854.          CMP.B     #'W',D3             .                             1,2
  855.          BEQ       M428                .W NOT ALLOWED                1,2
  856.          CMP.B     #'B',D3             .                             1,2
  857.          BEQ       M428                .B NOT ALLOWED                1,2
  858.          BRA.S     M4326               .                             1,2
  859.  
  860. M4324    CMP.B     #'S',D3                                           1,2
  861.          BEQ       M428                .S NOT ALLOWED                1,2
  862. M4326
  863.  
  864. * CALCULATE GOTO ADDRESS
  865.          LEA       TBLKEYS(PC),A0      A0 = PTR TO KEYS
  866.          MOVE.W    (A0,D0),D0          D0 = 16 BIT OFFSET
  867.          LEA       XBASE(PC),A2        A2 = BASE ADDRESS
  868.          ADD.L     D0,A2               A2 = COMPUTED GO TO  ADDRESS
  869.  
  870. * FORMAT OPERAND IF REGUIRED
  871.          TST.B     D1                  LOOK AT KEY
  872.          BMI.S     M440                OPERAND NOT REQUIRED
  873.  
  874.          MOVE.L    A3,A0
  875.          ADD.L     #FOP,A0             STORE POINTER
  876.          MOVE.L    A0,PTROP(A1)        POINTER TO OPERAND (FORMATED)
  877. M435     BSR.S     GETCHARF            D0 = CHAR                     1,1
  878.          CMP.B     #' ',D0
  879.          BEQ       M435                SKIP SPACES
  880.  
  881. M437     MOVE.B    D0,(A0)+            MOVE REST OF SOURCE LINE
  882.          BSR.S     GETCHARF            D0 = CHAR                     1,1
  883.          CMP.L     A5,A6               .                             1,1
  884.          BPL       M437                .                             1,1
  885.          MOVE.L    A0,PTRBUFE(A1)      POINTER TO END FORMATED SOURCE
  886.          MOVE.L    A0,A6               A6 = POINTER TO END OF SOURCE
  887. M440
  888.  
  889.          MOVE.L    PTROP(A1),A5        A5 = PTR TO OPERAND
  890.          LEA       TDATA+2(A1),A4            A4 = BASE ADDR FOR DATA STORE
  891.          CLR.L     D3                  D3 = OFFSET FOR DATA STORE
  892.          JMP       (A2)                GOTO ROUTINE
  893. *                                      D2 = MASK
  894. *                                      D4 = P-COUNTER
  895.  PAGE
  896.  
  897. COMMA    CMP.B     #',',(A5)+
  898.          BNE.S     ER                  NOT COMMA
  899.          RTS
  900.  
  901. GETCHAR  CMP.L     A5,A6
  902.          BMI.S     ER
  903.          MOVE.B    (A5)+,D0
  904.          RTS
  905.  
  906. GETCHARF CMP.L     A5,A6               .                             1,1
  907.          BMI.S     ERF
  908.          MOVE.B    (A5)+,D0
  909.          RTS
  910.  
  911. ERF      MOVE.L    A0,A5               .                             1,1
  912.  
  913. ER       MOVE.L    A5,D7               D7 = ERROR FLAG
  914.          SUB.L     A3,D7               ..& POSITION OF ERROR
  915. ERDONE   CLR.L     D6                  D6 = (ZERO) BYTE COUNT
  916.          BRA.S     CMMD35
  917.  
  918. CMMD2    CMP.B     #' ',(A5)           .                             1,2
  919.          BNE       ER                  OPERAND DID NOT END WITH SPACE  1,2
  920.  
  921. MCMMD2   DS        0                   NO OPERAND SEQUENCE
  922.          MOVE.W    D2,TDATA(A1)
  923.  
  924.          MOVE.B    TNB(A1),D3          FORMAT DATA
  925.          MOVE.L    D3,D6               D7 = NUMBER OF BYTES
  926.          LEA       TDATA(A1),A2        A2 = PTR TO HEX DATA
  927.          MOVE.L    A3,A6               D3 = NUMBER OF BYTES
  928.          ADD.L     #FDATA,A6           A6 = STORE PTR
  929. FPR315   MOVE.B    (A2)+,D0
  930.          BSR       PNT2HX
  931.          SUB.L     #1,D3
  932.          BNE       FPR315              MORE BYTES
  933.  
  934.          CLR.L     D7                  RESET ERROR FLAG
  935.  
  936. CMMD35   MOVEM.L   TDATA(A1),D0-D2     D0-D2 = DATA
  937.  
  938.          MOVE.L    PTRBUFE(A1),A6      A6 = POINTER TO END OF BUFFER
  939.  
  940.          MOVE.L    PCOUNTER(A1),A4     A4 = ORGINAL PC
  941.  
  942.          MOVE.L    LINK(A1),A1
  943.          UNLK      A1
  944.          RTS                           RETURN TO REQUESTOR
  945. *                                      A3 = POINTER TO START OF BUFFER
  946. *                                      D6 = NUMBER OF BYTES ASSEMBLED
  947. *                                      D7 = ERROR FLAG (POSITION)
  948.  
  949.  PAGE
  950. *  SIZE = BYTE
  951. *    DY,DX
  952. *    -(AY),-(AX)
  953. *    ....RX@.SS...RY@
  954. MABCD    DS        0                   (INDEX 0) ABCD SBCD
  955.          TST.B     TLSPEC(A1)
  956.          BEQ.S     MABCD9              DEFAULT SIXE = BYTE
  957.          CMP.W     #$00,TLENGTH(A1)
  958.          BNE       ER                  NOT .B
  959. MABCD9
  960.  
  961.          MOVE.W    #$11,D7
  962.          BSR       EA
  963.  
  964.          BSR       COMMA
  965.  
  966.          MOVE.L    D6,D0
  967.          AND.W     #7,D0
  968.          OR.W      D0,D2
  969.  
  970.          BTST      #5,D6
  971.          BEQ.S     MABCD55             D@,D@ MODE
  972.  
  973.          OR.W      #$0008,D2           -(A@),-(A@) MODE
  974.  
  975.          MOVE.W    #$10,D7
  976.          BSR       EA
  977.  
  978.          AND.W     #7,D6
  979.          ROR.W     #7,D6
  980.          OR.W      D6,D2
  981.          BRA       CMMD2
  982.  
  983. MABCD55  BSR       GETREGD             D@,D@
  984.          ROR.W     #7,D0
  985.          OR.W      D0,D2
  986. CMMD2S10 BRA       CMMD2
  987.  
  988.  PAGE
  989. MCMP     DS        0                   (INDEX 34)
  990.          BSR       EAALL
  991.          MOVE.L    D6,D4               D4 = SOURCE MODE
  992.  
  993.          BSR.S     COMMAS20
  994.  
  995.          CMP.B     #'A',(A5)
  996.          BEQ       MADDA21             DESTINATION = A@
  997.  
  998.          CMP.B     #$3C,D4
  999.          BEQ.S     MCMP56              SOURCE  ....I  #<DATA>,...
  1000.  
  1001.          BSR       FSIZE
  1002.  
  1003.          MOVE.W    #$009,D7
  1004.          BSR       EA                  D@ + (A@)+
  1005.          MOVE.L    D6,D0               MMMRRR
  1006.          AND.W     #$38,D0             MMM...
  1007.  
  1008.          BEQ.S     MCMP39              DESTINATION  D@
  1009.  
  1010.          CMP.B     #$18,D0
  1011.          BNE       ER
  1012.  
  1013.          AND.W     #$F,D6              (AY)+,(AX)+                   1,2
  1014.          ROR.W     #7,D6                                             1,2
  1015.          OR.W      D6,D2               ....AX@.........              1,2
  1016.          OR.W      #$0100,D2           ...1AX@.........              1,2
  1017.  
  1018.          MOVE.L    D4,D0
  1019.          AND.W     #$38,D0
  1020.          CMP.W     #$18,D0
  1021.          BNE       ER                  NOT (A@)+
  1022.          AND.W     #$F,D4              ............1AY@              1,2
  1023.          OR.W      D4,D2
  1024.          BRA       CMMD2
  1025.  
  1026. *  <EA>,D@
  1027. MCMP39   ROR.W     #7,D6
  1028.          OR.W      D6,D2
  1029.  
  1030.          OR.W      D4,D2
  1031.          BRA.S     CMMD2S11
  1032.  
  1033. MCMP56   MOVE.W    #$0C00,D2           #<DATA>,<EA>      MASK = CMPI
  1034.  
  1035.          BSR       FSIZE
  1036.  
  1037.          BSR       EADA
  1038.          OR.W      D6,D2
  1039. CMMD2S11 BRA       CMMD2S10
  1040.  
  1041. COMMAS20 BRA       COMMA
  1042.  PAGE
  1043. MADD     DS        0                   (INDEX 1)
  1044.          BSR       EAALL
  1045.          MOVE.L    D6,D4               D4 = SOURCE MODE
  1046.  
  1047.          BSR       COMMAS20
  1048.  
  1049.          CMP.B     #'A',(A5)
  1050.          BEQ       MADDA21             DESTINATION = A@
  1051.  
  1052.          CMP.B     #$3C,D4
  1053.          BEQ.S     MADD56              SOURCE  ....I  #<DATA>,...
  1054.  
  1055.          BSR       FSIZE
  1056.  
  1057.          MOVE.W    #$1FF,D7
  1058.          BSR       EA                  ALTERABLE + D@
  1059.          MOVE.L    D6,D0               MMMRRR
  1060.          AND.W     #$38,D0             MMM...
  1061.          BNE.S     MADD46              DESTINATION NOT  D@
  1062.  
  1063. *  <EA>,D@
  1064.          ROR.W     #7,D6
  1065.          OR.W      D6,D2
  1066.  
  1067.          OR.W      D4,D2
  1068.          BRA       CMMD2S11
  1069.  
  1070. MADD46   DS        0                   D@,<EA>
  1071.          OR.W      #$100,D2
  1072.  
  1073.          ROR.W     #7,D4
  1074.          OR.W      D4,D2               <EA> AS DESTINATION
  1075.  
  1076.          OR.W      D6,D2               D@  AS SOURCE
  1077.          BRA       CMMD2S11
  1078.  
  1079. MADD56   MOVE.L    D2,D0               #<DATA>,<EA>
  1080.          MOVE.W    #$0600,D2           MASK = ADDI
  1081.  
  1082.          CMP.W     #$D000,D0
  1083.          BEQ.S     MADD58
  1084.          MOVE.W    #$400,D2            MASK = SUBI
  1085. MADD58
  1086.  
  1087.          BSR       FSIZE
  1088.  
  1089.          BSR       EADA                DATA ALTERABLE ONLY
  1090.          OR.W      D6,D2
  1091.          BRA       CMMD2S11
  1092.  PAGE
  1093. MADDI    MOVE.L    PTROP(A1),A5        (INDEX 3) CMPI
  1094.          BSR       FSIZE
  1095.  
  1096.          BSR       EAZ
  1097.  
  1098.          BSR       COMMAS20
  1099.  
  1100.          BSR       EADA                DATA ALTERABLE ONLY
  1101.          OR.W      D6,D2
  1102.          BRA       CMMD2S11
  1103.  PAGE
  1104. *  SIZE =  BYTE, WORD, LONG
  1105. *  #<DATA>,SR
  1106. *  #<DATA>,<EA>    DATA ALTERABLE ONLY
  1107. MANDI    DS        0                   (INDEX 28) ANDI EORI ORI
  1108.          BSR       FSIZE
  1109.  
  1110.          BSR       EAZ
  1111.  
  1112.          BSR       COMMAS20
  1113.  
  1114.          CMP.B     #'S',(A5)
  1115.          BEQ.S     MANDI23
  1116.  
  1117.          BSR       EADA
  1118.          OR.W      D6,D2
  1119.          BRA       CMMD2S11
  1120.  
  1121. MANDI23  CMP.B     #'R',1(A5)          #<DATA>,SR
  1122.          BNE       ER
  1123.          CMP.W     #$0080,TLENGTH(A1)
  1124.          BEQ       ER                  .L NOT ALLOWED WITH SR
  1125.          OR.W      #$003C,D2
  1126.          ADD.L     #2,A5               POINTER TO END OF OPERAND     1,2
  1127.          BRA       CMMD2
  1128.  PAGE
  1129. MADDA    DS        0                   (INDEX 2)
  1130.          BSR       EAALL
  1131.          OR.W      D6,D2
  1132.  
  1133.          BSR       COMMA
  1134.  
  1135. MADDA21  OR.W      D6,D2
  1136.          MOVE.W    TLENGTH(A1),D0
  1137.          BEQ       ER                  .BYTE NOT ALLOWED
  1138.          LSL.W     #1,D0               .W = 011......
  1139.          OR.W      #$00C0,D0           .L = 111......
  1140.          OR.W      D0,D2
  1141.  
  1142.          BSR       GETREGA
  1143.          ROR.W     #7,D0
  1144.          OR.W      D0,D2
  1145.          BRA       CMMD2
  1146.  PAGE
  1147. MADDQ    DS        0                   (INDEX 4)
  1148.          BSR       FSIZE
  1149.  
  1150.          BSR       GETIMM
  1151.  
  1152.          TST.L     D0
  1153.          BEQ       ER                  DATA = ZERO
  1154.          CMP.B     #9,D0
  1155.          BPL       ER                  VALUE TOO BIG
  1156.          AND.W     #$7,D0              MAKE 8 = 0
  1157.          ROR.W     #7,D0               SHIFT DATA TO BITS 9-11
  1158.          OR.W      D0,D2
  1159.  
  1160.          BSR       COMMA
  1161.  
  1162.          BSR       EAA                 ALTERABLE ADDRESSING
  1163.  
  1164.          OR.W      D6,D2
  1165.          MOVE.L    D2,D0
  1166.          AND.W     #$C0,D0
  1167.          BNE.S     MADDQ25
  1168.  
  1169. * BYTE SIZE; ADDRESS REGISTER DIRECT NOT ALLOWED
  1170.          MOVE.L    D2,D0
  1171.          AND.W     #$38,D0
  1172.          CMP.B     #$08,D0
  1173.          BEQ       ER
  1174. MADDQ25  BRA       CMMD2
  1175.  PAGE
  1176. * SIZE = BYTE, WORD, LONG
  1177. *    DY,DX
  1178. *    -(AY),-(AX)
  1179. *    ....RX@.SS...RY@
  1180. MADDX    DS        0                   (INDEX 5)
  1181.          BSR       FSIZE
  1182.  
  1183.          MOVE.W    #$11,D7
  1184.          BSR       EA
  1185.  
  1186.          BSR       COMMA
  1187.  
  1188.          MOVE.L    D6,D0
  1189.          AND.W     #7,D0
  1190.          OR.W      D0,D2
  1191.  
  1192.          BTST      #5,D6
  1193.          BEQ.S     MADDX5              D@,D@ MODE
  1194.  
  1195.          OR.W      #$0008,D2           -(A@),-(A@) MODE
  1196.  
  1197.          MOVE.W    #$10,D7
  1198.          BSR       EA
  1199.  
  1200.          AND.W     #7,D6
  1201.          ROR.W     #7,D6
  1202.          OR.W      D6,D2
  1203.          BRA       CMMD2
  1204.  
  1205. MADDX5   BSR       GETREGD             D@,D@
  1206.          ROR.W     #7,D0
  1207.          OR.W      D0,D2
  1208.          BRA       CMMD2
  1209.  PAGE
  1210. *  SIZE = BYTE, WORD, LONG
  1211. *         <EA>,D@
  1212. *         D@,<EA>
  1213. MAND     BSR       FSIZE               (INDEX 6)
  1214.  
  1215.          CMP.B     #'#',(A5)
  1216.          BEQ.S     MAND90
  1217.  
  1218.          BSR       A5TODEST            MOVE A5 TO DESTINATION
  1219.  
  1220.          MOVE.B    (A5),D0             D0 = 1ST CHAR OF DESTINATION
  1221.          MOVE.L    PTROP(A1),A5        A5 = POINTER TO OPERAND
  1222.          CMP.B     #'D',D0
  1223.          BEQ.S     MAND77
  1224.  
  1225.          OR.W      #$0100,D2            D@,<EA>
  1226.  
  1227.          BSR       GETREGD
  1228.          ROR.W     #7,D0
  1229.          OR.W      D0,D2
  1230.  
  1231.          BSR       COMMA
  1232.  
  1233.          BSR       EAM                 ALTERABLE MEMORY
  1234.          OR.W      D6,D2
  1235.          BRA       CMMD2
  1236.  
  1237. MAND77   BSR       EADADDR             <EA>,D@
  1238.          OR.W      D6,D2
  1239.  
  1240.          BSR       COMMA
  1241.  
  1242.          BSR       GETREGD
  1243.          ROR.W     #7,D0
  1244.          OR.W      D0,D2
  1245.          BRA       CMMD2
  1246.  
  1247. MAND90   AND.W     #$F000,D2
  1248.          CMP.W     #$C000,D2
  1249.          BEQ.S     MAND97               AND
  1250.          MOVE.W    #$0000,D2           CHANGE TO "ORI"
  1251. MAND91   BRA       MANDI
  1252. MAND97   MOVE.W    #$0200,D2           CHANGE TO "ADDI"
  1253.          BRA       MAND91
  1254.  PAGE
  1255. MEOR     BSR       FSIZE               (INDEX 35)
  1256.  
  1257.          CMP.B     #'#',(A5)
  1258.          BEQ.S     MEOR90
  1259.  
  1260.          BSR       GETREGD
  1261.          ROR.W     #7,D0
  1262.          OR.W      D0,D2
  1263.  
  1264.          BSR       COMMA
  1265.  
  1266.          BSR       EADA                DATA ALTERABLE ADDRESSING
  1267.          OR.W      D6,D2
  1268.          BRA       CMMD2
  1269.  
  1270. MEOR90   MOVE.L    PTROP(A1),A5        A5 = POINTER TO OPERAND
  1271.          MOVE.W    #$0A00,D2           CHANGE TO "EORI"
  1272.          BRA       MANDI
  1273.  SPC 2
  1274. A5TODEST CLR.L     D1                  MOVE A5 TO DESTINATION
  1275. A5300    BSR       GETCHAR
  1276.          CMP.B     #'(',D0
  1277.          BNE.S     A5305
  1278.          MOVE.L    D0,D1
  1279. A5305    CMP.B     #')',D0
  1280.          BEQ       A5TODEST
  1281.          CMP.B     #',',D0
  1282.          BNE       A5300
  1283.          TST       D1
  1284.          BNE       A5300
  1285.          RTS
  1286.  PAGE
  1287. MASL     DS        0                   (INDEX 7)
  1288. *         ASL     LSL     ROL     ROXL
  1289. *  MASKS  E000    E008    E018    E010
  1290. *         E0C0    E2C0    E6C0    E4C0   SHIFT MEMORY
  1291.  
  1292.          BSR       FSIZE
  1293.  
  1294.          MOVE.B    (A5)+,D0
  1295.          CMP.B     #'#',D0
  1296.          BNE.S     MSL200
  1297.  
  1298. *  #<COUNT>,D@
  1299.          BSR       EV
  1300.          CMP.L     #8,D0
  1301.          BGT       ER                  GREATER THAN 8
  1302.  
  1303.          AND.B     #$7,D0              MAKE 8 INTO 0
  1304. MSL150   ROR.W     #7,D0
  1305.          AND.W     #$F1FF,D2
  1306.          OR.W      D0,D2               COUNT/REG
  1307.  
  1308.          BSR       COMMA
  1309.  
  1310.          BSR       GETREGD
  1311.          OR.W      D0,D2
  1312.          BRA       CMMD2
  1313.  
  1314. MSL200   DS        0                   D@,D@
  1315.          CMP.B     #'D',D0
  1316.          BNE.S     MSL300
  1317.  
  1318. *        D@,D@
  1319.          OR.W      #$20,D2
  1320.          SUB.L     #1,A5
  1321.          BSR       GETREGD
  1322.          BRA       MSL150
  1323.  
  1324. MSL300   DS        0                   <EA>      SHIFT MEMORY
  1325.          SUB.L     #1,A5
  1326.          OR.W      #$00C0,D2           SIZE = MEMORY
  1327.  
  1328.          AND.W     #$FFC0,D2           REMOVE "SHIFT MEMORY" BITS
  1329.  
  1330.          CMP.W     #$0040,TLENGTH(A1)
  1331.          BNE.S     ER2                 NOT .WORD                     1,2
  1332.  
  1333.          BSR       EAM
  1334.          OR.W      D6,D2
  1335.          BRA       CMMD2
  1336.  PAGE
  1337. MSCC     BSR       SIZEBYTE            (INDEX 29) NBCD SCC TAS
  1338.  
  1339.          BSR       EADA                DATA ALTERABLE ONLY
  1340.          OR.W      D6,D2
  1341.          BRA       CMMD2
  1342.  PAGE
  1343. MBCHG    DS        0                   (9)
  1344.          CMP.B     #'#',(A5)
  1345.          BNE.S     MB200
  1346.  
  1347.          MOVE.W    #$0840,D2           NEW OP-CODE MASK
  1348.  
  1349. MB100    ADD.L     #1,A5
  1350.          BSR       EV                  EVALUATE EXPRESSION
  1351.          CMP.L     #33,D0
  1352.          BGT.S     ER2                 (MODULO 32)                   1,2
  1353.          MOVE.W    D0,TDATA+2(A1)
  1354.          ADD.L     #2,D3               STORE POINTER
  1355.  
  1356.          ADD.B     #2,TNB(A1)          .                             1,2
  1357.  
  1358. MB105    BSR       COMMA               .                             1,2
  1359.  
  1360.          BSR       EADA                DESTINATION
  1361.          OR.W      D6,D2
  1362.  
  1363.          TST.B     TLSPEC(A1)          ..                            1,2
  1364.          BEQ.S     MB185               DEFAULT                       1,2
  1365.  
  1366.          AND.W     #$0038,D6           .                             1,2
  1367.          BNE.S     MB145               DESTINATION <EA> WAS NOT D@   1,2
  1368.  
  1369.          CMP.W     #$80,TLENGTH(A1)    DESTINATION <EA> WAS D@       1,2
  1370.          BEQ.S     MB185               LENGTH IS .L                  1,2
  1371. ER2      BRA       ER                  .                             1,2
  1372.  
  1373. MB145    TST.W     TLENGTH(A1)         .                             1,2
  1374.          BNE       ER2                 NOT BYTE LENGTH               1,2
  1375.  
  1376. MB185    BRA       CMMD2               .                             1,2
  1377.  
  1378. MB200    BSR       GETREGD             DYNAMIC
  1379.          ROR.W     #7,D0
  1380.          OR.W      D0,D2
  1381.  
  1382.          BRA       MB105               .                             1,2
  1383.  
  1384. MBSET    CMP.B     #'#',(A5)           (INDEX 11) BCLR BSET
  1385.          BNE       MB200
  1386.  
  1387.          MOVE.W    #$08C0,D2
  1388.          BRA       MB100
  1389.  
  1390. MBCLR    CMP.B     #'#',(A5)           (INDEX 30)
  1391.          BNE       MB200
  1392.  
  1393.          MOVE.W    #$0880,D2
  1394.          BRA       MB100
  1395.  
  1396. MBTST    CMP.B     #'#',(A5)           (INDEX 31)
  1397.          BNE       MB200
  1398.  
  1399.          MOVE.W    #$0800,D2
  1400.          BRA       MB100
  1401.  PAGE
  1402. MDBCC    DS        0                   (INDEX 8)
  1403.          BSR       GETREGD
  1404.          OR.W      D0,D2
  1405.  
  1406.          BSR       COMMA
  1407.          BSR.S     EVSR
  1408.          BRA.S     MBRA23
  1409.  SPC 6
  1410. *  SIZE   .S  =  .W   (DEFAULT)
  1411. *         .L  =  .L
  1412. MBRA     DS        0                   (INDEX 10)
  1413.          BSR.S     EVSR
  1414.  
  1415.          CMP.W     #$0080,TLENGTH(A1)
  1416.          BEQ.S     MBRA23              FORCED LONG
  1417.  
  1418.          BSR       EA8BITS             -128 TO +127
  1419.          BNE.S     MBRA23              NOT 8 BIT VALUE
  1420.  
  1421.          OR.B      D5,D2
  1422.          BRA       CMMD2               .SHORT
  1423.  
  1424. EVER     BRA       ER                  ERROR HANDLER                 1,1
  1425.  
  1426. MBRA23   TST.B     TLSPEC(A1)
  1427.          BEQ.S     MBRA27
  1428.          CMP.W     #$0040,TLENGTH(A1)
  1429.          BEQ       EVER                .S SPECIFIED                  1,1
  1430. MBRA27
  1431.  
  1432.          MOVE.L    D4,D5               RESTORE D5
  1433.          BSR       EA16BITS            -32K TO +32K
  1434.          MOVE.W    D5,TDATA+2(A1)
  1435.          ADD.B     #2,TNB(A1)
  1436.          BRA       CMMD2
  1437.  
  1438. EVSR     BSR       EV
  1439.          CMP.B     #' ',(A5)           .                             1,1
  1440.          BNE       EVER                DID NOT TERMINATE WITH SPACE  1,1
  1441.  
  1442.          MOVE.L    D0,D5
  1443.          ASR.L     #1,D0
  1444.          BCS       EVER                ODD VALUE                     1,1
  1445.          MOVE.L    PCOUNTER(A1),D4
  1446.          ADD.L     #2,D4               D4 = PC + 2
  1447.          SUB.L     D4,D5
  1448.          BEQ       EVER                ZERO; SPECIAL CASE ERROR      1,1
  1449.          MOVE.L    D5,D4
  1450.          RTS
  1451.  PAGE
  1452. MCHK     DS        0                   (INDEX 12) CHK DIV MUL
  1453.          BSR       SIZEWORD
  1454.  
  1455.          BSR       EADADDR             DATA ADDRESSING ONLY
  1456.          OR.W      D6,D2
  1457.  
  1458.          BSR       COMMA
  1459.  
  1460.          BSR       GETREGD
  1461.          ROR.W     #7,D0
  1462.          OR.W      D0,D2
  1463.  
  1464.          BRA       CMMD2
  1465.  SPC 4
  1466. MCLR     DS        0                   (INDEX 13)
  1467.          BSR       FSIZE
  1468.  
  1469.          BSR       EADA                DATA ALTERABLE ONLY
  1470.          OR.W      D6,D2
  1471.          BRA       CMMD2
  1472.  SPC 4
  1473. * SIZE = BYTE, WORD, LONG
  1474. MCMPM    DS        0                   (INDEX 14)
  1475.          BSR       FSIZE
  1476.  
  1477.          MOVE.W    #$0008,D7
  1478.          BSR       EA                  -(A@)   ONLY
  1479.          AND.W     #7,D6
  1480.          OR.W      D6,D2
  1481.  
  1482.          BSR       COMMA
  1483.  
  1484.          MOVE.W    #$0008,D7
  1485.          BSR       EA
  1486.          AND.W     #7,D6
  1487.          ROR.W     #7,D6
  1488.          OR.W      D6,D2
  1489.          BRA       CMMD2
  1490.  PAGE
  1491. MEXG     DS        0                   (INDEX 16)
  1492.          BSR       SIZELONG
  1493.  
  1494.          BSR       GETREGAD
  1495.          MOVE.L    D0,D4               D4 = REG NUMBER
  1496.          MOVE.L    D1,D5               D5 = REG TYPE
  1497.  
  1498.          BSR       COMMA               TEST FOR COMMA
  1499.  
  1500.          BSR       GETREGAD
  1501.  
  1502.          CMP.L     D1,D5
  1503.          BEQ.S     MEXG35              BOTH REGS THE SAME
  1504.  
  1505. *  DX,AY  OR  AY,DX
  1506.          OR.W      #$88,D2             MODE
  1507.          TST.B     D1
  1508.          BNE.S     MEXG25
  1509.  
  1510.          EXG.L     D0,D4               SWAP SOURCE & DESTINATION
  1511.  
  1512. MEXG25   OR.W      D0,D2               .......MMMMMYYY
  1513.          ROR.W     #7,D4
  1514.          OR.W      D4,D2               ....XXXMMMMMYYY
  1515.          BRA       CMMD2
  1516.  
  1517. MEXG35   OR.W      #$0040,D2           OP-MODE
  1518.          TST.B     D1
  1519.          BEQ       MEXG25              DX,DY
  1520.  
  1521.          OR.W      #$0048,D2           AX,AY
  1522.          BRA       MEXG25
  1523.  
  1524.   PAGE
  1525. MEXT     DS        0                   (INDEX 17)
  1526.          TST.W     TLENGTH(A1)
  1527.          BEQ       ER                  BYTE SIZE NOT ALLOWED
  1528.  
  1529.          BSR       FSIZE               .W = ........10......
  1530.          ADD.W     #$0040,D2           .L = ........11......
  1531.  
  1532.          BSR       GETREGD
  1533.          OR.W      D0,D2
  1534.          BRA       CMMD2
  1535.  PAGE
  1536. MMOVEM   DS        0                   (INDEX 27)
  1537.          MOVE.W    TLENGTH(A1),D0      SIZE BITS  76 TO 6
  1538.          BEQ       ER                  BYTE       00  ERROR
  1539.          LSR.W     #1,D0               WORD       01    0
  1540.          AND.W     #$0040,D0           LONG       10    1
  1541.          OR.W      D0,D2
  1542.  
  1543.          ADD.B     #2,TNB(A1)          NUMBER OF BYTES
  1544.          ADD.L     #2,D3               FORCE STORE PTR PAST MASK
  1545.  
  1546.          CMP.B     #'A',(A5)
  1547.          BEQ.S     MMM44
  1548.          CMP.B     #'D',(A5)
  1549.          BEQ.S     MMM44
  1550.  
  1551. *    <EA>,<REGISTER LIST>              MEMORY TO REGISTER
  1552.          OR.W      #$0400,D2           DIRECTION BIT
  1553.  
  1554.          MOVE.W    #$7EC,D7            MODES ALLOWED                 1,1
  1555.          BSR       EA
  1556.          OR.W      D6,D2
  1557.  
  1558.          BSR       COMMA
  1559.  
  1560.          BSR.S     MMM48               .                             1,2
  1561.          BRA       CMMD2               .                             1,2
  1562.  
  1563.  
  1564. *   <REGISTER LIST>,<EA>               REGISTER TO MEMORY
  1565. MMM44    DS        0
  1566.  
  1567. * EVALUATE DESTINATION FIRST
  1568. MMM46    BSR       GETCHAR
  1569.          CMP.B     #',',D0             FIND COMMA
  1570.          BNE       MMM46
  1571.  
  1572.          MOVE.W    #$1F4,D7            MODES ALLOWED                 1,1
  1573.          BSR       EA
  1574.          OR.W      D6,D2
  1575.          MOVE.L    A5,PENDOP(A1)       END OF OPERAND                1,2
  1576.          MOVE.L    PTROP(A1),A5
  1577.          BSR.S     MMM48               EVALUATE REGISTERS            1,2
  1578.          MOVE.L    PENDOP(A1),A5       POINTER TO END OF OPERAND     1,2
  1579.          BRA       CMMD2               .                             1,2
  1580.     PAGE
  1581. *        D6 = CORRESPONDENCE MASK
  1582. *        D4 = CONTROL  $FF '-' '/'
  1583. MMM48    CLR.L     D6                  MASK                          1,2
  1584.          MOVE.L    #-1,D4              CONTROL = $FF
  1585.  
  1586. RL111    BSR       GETCHAR
  1587.          CMP.B     #',',D0
  1588.          BEQ.S     RL114               DONE; FOUND COMMA             1,2
  1589.          CMP.B     #' ',D0             .                             1,2
  1590.          BNE.S     RL115               NOT SPACE                     1,2
  1591. RL114    RTS       DONE                .                             1,2
  1592.  
  1593. RL115    CMP.B     #'/',D0             .                             1,2
  1594.          BNE.S     RL444
  1595.  
  1596.          TST.B     D4                  CONTROL
  1597.          BMI       ER
  1598.          MOVE.L    D0,D4               CONTROL = '/'
  1599. RL333    BSR       GETREGAD
  1600.          OR.B      D0,D1               D1 = BIT POSITION
  1601.          MOVE.B    D1,D5               D5 = LAST REGISTER ENTERED
  1602.          BSR.S     SETBIT
  1603.          BRA       RL111
  1604.  
  1605. RL444    CMP.B     #'-',D0
  1606.          BNE.S     RL666
  1607.  
  1608.          CMP.B     #'/',D4             CONTROL
  1609.          BNE       ER
  1610.          MOVE.L    D0,D4               CONTROL = '-'
  1611.          BSR       GETREGAD
  1612.          OR.B      D0,D1
  1613.          MOVE.L    D1,D7               D7 = NOW REGISTER
  1614.          MOVE.B    D5,D0               D5 = LAST REG
  1615.          EOR.B     D1,D0
  1616.          AND.B     #$38,D0
  1617.          BNE       ER                  NOT MATCED SET
  1618.          CMP.B     D1,D5
  1619.          BPL       ER
  1620.  
  1621. RL555    ADD.L     #1,D5
  1622.          MOVE.L    D5,D1
  1623.          BSR.S     SETBIT
  1624.          CMP.B     D7,D5
  1625.          BMI       RL555
  1626.          BRA       RL111
  1627.  
  1628. RL666    TST.B     D4
  1629.          BPL       ER
  1630.          MOVE.B    #'/',D4             CONTROL = '/'
  1631.          SUB.L     #1,A5
  1632.          BRA       RL333
  1633.  PAGE
  1634. SETBIT   LEA       MTBL(PC),A0         SET BIT IN CORRESPONDENCE MASK
  1635.          MOVE.L    D2,D0
  1636.          AND.W     #$38,D0
  1637.          CMP.W     #$20,D0
  1638.          BNE.S     RL30                NOT PREDECREMENT
  1639.          MOVE.B    (A0,D1),D1          D1 = BIT  (FOR SURE)
  1640. RL30     BSET      D1,D6
  1641.  
  1642.          MOVE.W    D6,TDATA+2(A1)      SAVE CORRESPONDENCE MASK
  1643.          RTS
  1644.  
  1645. MTBL     DC.B      15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
  1646.  PAGE
  1647. *   D@,<DATA>(A@)
  1648. *   <DATA>(A@),D@
  1649. *         (A@),D@            FORCED TO 0(A@),D0
  1650. *         D@,(A@)            FORCED TO D0,0(A@)
  1651. *
  1652. *  SIZE = WORD, LONG
  1653. MMOVEP   DS        0                   (INDEX 33)
  1654.          MOVE.W    TLENGTH(A1),D0
  1655.          BEQ       ER                  .BYTE NOT ALLOWED
  1656.          LSR.W     #1,D0
  1657.          AND.W     #$0040,D0
  1658.          OR.W      D0,D2               SIZE
  1659.  
  1660.          MOVE.W    #$25,D7
  1661.          BSR       EA                  D6 = MODE
  1662.  
  1663.          BSR       COMMA
  1664.  
  1665.          MOVE.L    D6,D0
  1666.          AND.W     #$38,D0
  1667.          CMP.B     #$0,D0
  1668.          BEQ.S     MMP344              D@,<DATA>(A@)
  1669.  
  1670. *    <DATA>(A@),D@
  1671.          BSR       GETREGD
  1672.          ROR.W     #7,D0
  1673.          OR.W      D0,D2               D@
  1674.          BRA.S     MMP348
  1675.  
  1676. MMP344   OR.W      #$0080,D2           REGISTER TO MEMORY
  1677.  
  1678.          ROR.W     #7,D6
  1679.          OR.W      D6,D2               D@
  1680.  
  1681.          MOVE.W    #$24,D7
  1682.          BSR       EA
  1683. MMP348   MOVE.L    D6,D0
  1684.          AND.W     #7,D6
  1685.          OR.W      D6,D2               A@
  1686.  
  1687.          AND.W     #$38,D0
  1688.          CMP.B     #$10,D0
  1689.          BNE.S     MMP368              <DATA>(A@)
  1690.  
  1691.          CLR.W     TDATA+2(A1)      <DATA> FORCED TO ZERO;  "(A@)"
  1692.          ADD.B     #2,TNB(A1)          NUMBER OF BYTES
  1693.          ADD.L     #2,D3               STORE POINTER
  1694. MMP368   BRA CMMD2
  1695.  PAGE
  1696. MMOVEQ   DS        0                   (INDEX 34)
  1697.          BSR       GETIMM
  1698.          MOVE.L    D0,D5
  1699.  
  1700.          BSR       EA8BITS             -128 TO +127
  1701.          BNE       ER
  1702.          OR.B      D5,D2               D5 = VALUE
  1703.  
  1704.          BSR       COMMA
  1705.  
  1706.          BSR       GETREGD             D@
  1707.          ROR.W     #7,D0
  1708.  
  1709. MMQ20    OR.W      D0,D2
  1710.          BSR.S     SIZELONG
  1711.          BRA       CMMD2
  1712.  
  1713. SIZELONG TST.B     TLSPEC(A1)          MUST BE .LONG
  1714.          BEQ.S     SI201               DEFAULT SIZE OK
  1715.          CMP.W     #$0080,TLENGTH(A1)
  1716.          BNE.S     ER10                NOT .LONG
  1717. SI201    RTS
  1718.  
  1719. SIZEWORD CMP.W     #$0040,TLENGTH(A1)  MUST BE .WORD
  1720.          BEQ       SI201     [RTS]
  1721. ER10     BRA       ER
  1722.  
  1723. SIZEBYTE TST.B     TLSPEC(A1)
  1724.          BEQ.S     SI222               DEFAULT SIZE OK
  1725.          TST.W     TLENGTH(A1)
  1726.          BNE       ER10
  1727. SI222    RTS
  1728.  PAGE
  1729. MMOVE    DS        0                   (INDEX 21)
  1730.          CMP.B     #'S',(A5)
  1731.          BNE.S     MM40
  1732.          MOVE.W    #$40C0,D2           SR,<EA>
  1733.          ADD.L     #1,A5
  1734.          CMP.B     #'R',(A5)+
  1735.          BNE       ER10
  1736.  
  1737.          BSR       COMMA
  1738.  
  1739.          BSR       EADA                DATA ALTERABLE ONLY (DESTINATION)
  1740.  
  1741. MM315    OR.W      D6,D2
  1742.          BSR       SIZEWORD
  1743.          BRA       CMMD2
  1744.  
  1745. MM40     CMP.B     #'U',(A5)
  1746.          BNE.S     MM50
  1747.          ADD.L     #1,A5
  1748.          CMP.B     #'S',(A5)+
  1749.          BNE       ER10
  1750.          CMP.B     #'P',(A5)+
  1751.          BNE       ER10
  1752.  
  1753.          BSR       COMMA
  1754.  
  1755.          MOVE.W    #$4E68,D2           USP,A@
  1756.          BSR       GETREGA
  1757.          BRA       MMQ20
  1758.  
  1759. * GET EXCEPTIONS FROM DESTINATION
  1760. MM50     DS        0
  1761.  
  1762.          BSR       A5TODEST            MOVE A5 TO DESTINATION
  1763.  
  1764.          MOVE.B    (A5)+,D0
  1765.          CMP.B     #'C',D0
  1766.          BNE.S     MM60
  1767.          CMP.B     #'C',(A5)+
  1768.          BNE       ER10
  1769.          CMP.B     #'R',(A5)+
  1770.          BNE       ER10
  1771.          MOVE.W    #$44C0,D2           <EA>,CCR
  1772.  
  1773. MM508    MOVE.L    A5,PENDOP(A1)       SAVE POINTER                  1,2
  1774.          MOVE.L    PTROP(A1),A5        A5 = POINTER TO OPERAND
  1775.  
  1776.          BSR       EADADDR    DATA ADDRESSING ONLY (SOURCE)
  1777.          MOVE.L    PENDOP(A1),A5       .                             1,2
  1778.          BRA       MM315
  1779.  
  1780. MM60     CMP.B     #'S',D0
  1781.          BNE.S     MM70
  1782.          MOVE.W    #$46C0,D2           <EA>,SR
  1783.          CMP.B     #'R',(A5)+
  1784.          BNE       ER
  1785.          BRA       MM508
  1786.  
  1787. MM70     CMP.B     #'U',D0
  1788.          BNE.S     MM80
  1789.          MOVE.W    #$4E60,D2           A@,USP
  1790.          CMP.B     #'S',(A5)+
  1791.          BNE       ER
  1792.          CMP.B     #'P',(A5)+
  1793.          BNE       ER
  1794.  
  1795.          MOVE.L    A5,PENDOP(A1)       .                             1,2
  1796.          MOVE.L    PTROP(A1),A5
  1797.          BSR       GETREGA
  1798.          MOVE.L    PENDOP(A1),A5       RESTORE A5                    1,2
  1799.          BRA       MMQ20
  1800.  
  1801. MM80     MOVE.L    PTROP(A1),A5        A5 = POINTER TO SOURCE FIELD
  1802.          BSR       FSIZE               GET SIZE (BITS  7 - 6)
  1803.          LSL.W     #6,D2               ADJUST TO(BITS 13-12)
  1804.          BTST      #13,D2
  1805.          BNE.S     MM804               .L 10 TO 10
  1806.          ADD.W     #$1000,D2           .W 01 TO 11
  1807.          OR.W      #$1000,D2           .B 00 TO 01
  1808. MM804    BSR       EAALL               SOURCE; ALL MODES ALLOWED
  1809.          OR.W      D6,D2
  1810.  
  1811. * IF BITE SIZE; "ADDRESS REGISTER DIRECT" NOT ALLOWED
  1812.          MOVE.L    D2,D0
  1813.          AND.W     #$3000,D0
  1814.          CMP.W     #$1000,D0           .                             1,2
  1815.          BNE.S     MM806               NOT .B SIZE
  1816.          AND.B     #$38,D6             .                             1,2
  1817.          CMP.B     #$08,D6
  1818.          BEQ       ER
  1819. MM806    DS        0
  1820.  
  1821.          BSR       COMMA
  1822.  
  1823.          MOVE.W    #$1FF,D7            DATA ALTERABLE + A@
  1824.          BSR       EA
  1825.  
  1826.  
  1827.          MOVE.L    D6,D0               DESTINATION
  1828.          AND.W     #$0038,D0
  1829.          CMP.W     #$0008,D0
  1830.          BEQ.S     MMOVEA1             A@ MAKE MOVEA
  1831.  
  1832. * POSITION REGISTER AND MODE OF DESTINATION
  1833. MM825    ROR.L     #3,D6               RRR............. .............MMM
  1834.          ROR.W     #3,D6                                MMM.............
  1835.          SWAP      D6                  MMM............. RRR.............
  1836.          ROL.W     #3,D6                                .............RRR
  1837.          ROL.L     #1,D6               MM.............. ............RRRM
  1838.          ROL.L     #8,D6               ................ ....RRRMMM......
  1839.          OR.W      D6,D2
  1840.          BRA       CMMD2
  1841.  PAGE
  1842. MMOVEA1  CLR.L     D3
  1843.          MOVE.B    #2,TNB(A1)
  1844.  
  1845. MMOVEA   DS        0                   (INDEX 32)
  1846.          MOVE.L    PTROP(A1),A5        A5 = POINTER TO OPERAND
  1847.  
  1848.          MOVE.W    TLENGTH(A1),D2      D0 = SIZE                     1,2
  1849.          BEQ       ER                  .BYTE NOT ALLOWED
  1850.  
  1851.          LSL.W     #6,D2               .SIZE                         1,2
  1852.          BTST      #12,D2              .                             1,2
  1853.          BEQ.S     MMA225              .L = ..10                     1,2
  1854.          OR.W      #$3000,D2           .W = ..11                     1,2
  1855. MMA225
  1856.  
  1857.          BSR       EAALL               ALL MODES ALLOWED
  1858.          OR.W      D6,D2
  1859.  
  1860.          BSR       COMMA
  1861.  
  1862.          MOVE.W    #$0002,D7           A@ ONLY
  1863.          BSR       EA
  1864.          BRA       MM825
  1865.  
  1866.  PAGE
  1867. MJMP     DS        0                   (INDEX 18)
  1868.          TST.B     TLSPEC(A1)          .                             1,1
  1869.          BEQ.S     MJMP32              DEFAULT (ALLOW EITHER .S OR .L) 1,1
  1870.          MOVE.W    TLENGTH(A1),D0      .                             1,1
  1871.          BEQ       ER                  .B NOT ALLOWED                1,1
  1872.          MOVE.W    #$6E4,D7            D7 = MODES ALLOWED            1,1
  1873.          CMP.W     #$40,D0             .                             1,1
  1874.          BEQ.S     MJMP22              .S SPECIFIED (.W ACCEPTED)    1,1
  1875.          MOVE.W    #$8764,D7           MODE FOR .L                   1,1
  1876. MJMP22   BSR       EA                  .                             1,1
  1877.          BRA.S     MJMP42              .                             1,1
  1878.  
  1879. MJMP32   BSR       EAC                 CONTROL ADDRESSING ONLY       1,1
  1880. MJMP42   OR.W      D6,D2               .                             1,1
  1881.          BRA       CMMD2
  1882.  SPC 4
  1883. * SIZE = LONG
  1884. MLEA     DS        0                   (INDEX 19)
  1885.          BSR       SIZELONG
  1886.  
  1887.          BSR       EAC       CONTROL ADDRESSING ONLY
  1888.          OR.W      D6,D2
  1889.  
  1890.          BSR       COMMA
  1891.  
  1892.          BSR       GETREGA
  1893.          ROR.W     #7,D0
  1894.          OR.W      D0,D2
  1895.          BRA       CMMD2
  1896.  
  1897.  PAGE
  1898. * SIZE = LONG
  1899. MPEA     DS        0                   (INDEX 36)
  1900.          BSR       SIZELONG
  1901.  
  1902.          BSR       EAC       CONTROL ADDRESSING ONLY
  1903.          OR.W      D6,D2
  1904.          BRA       CMMD2
  1905.  SPC 4
  1906. MSWAP    DS        0                   (INDEX 24)
  1907. * SIZE WORD
  1908.          CMP.W     #$0040,TLENGTH(A1)
  1909.          BNE       ER                  NOT .W
  1910.  
  1911.          BSR       GETREGD             D@ ONLY
  1912.          OR.W      D0,D2
  1913.          BRA       CMMD2
  1914.  PAGE
  1915. GETIMM   CMP.B     #'#',(A5)+
  1916.          BNE       ER
  1917.  
  1918.          BSR       EV                  EVALUATE EXPRESSION
  1919.          RTS                           D0 = VALUE
  1920.  
  1921. MLINK    BSR       GETREGA             (INDEX 20)
  1922.          OR.W      D0,D2
  1923.  
  1924.          BSR       COMMA
  1925.  
  1926.          BSR       GETIMM
  1927.          MOVE.L    D0,D5
  1928.          BSR       EA16BITS            -32K TO +32K
  1929.          MOVE.W    D0,TDATA+2(A1)
  1930.  
  1931.          ADD.B     #2,TNB(A1)
  1932.          BRA       CMMD2
  1933.  
  1934. MSTOP    DS        0                   (INDEX 23)
  1935. * UNSIZED
  1936.          BSR       GETIMM
  1937.          CMP.L     #$00010000,D0
  1938.          BCC       ER
  1939.          MOVE.W    D0,TDATA+2(A1)
  1940.          ADD.B     #2,TNB(A1)
  1941.          BRA       CMMD2
  1942.  
  1943. MTRAP    DS        0                   (INDEX 25)
  1944.          BSR       GETIMM
  1945.          CMP.L     #16,D0
  1946.          BCC       ER
  1947.          OR.W      D0,D2
  1948.          BRA       CMMD2
  1949.  PAGE
  1950. MUNLK    DS        0                   (INDEX 26)
  1951. * UNSIZED
  1952.          BSR       GETREGA
  1953.          OR.W      D0,D2
  1954.          BRA       CMMD2
  1955.  SPC 4
  1956. MDC      DS        0                   (INDEX 37) .W ONLY ALLOWED
  1957.          BSR       EV
  1958.          MOVE.L    D0,D5
  1959.          BSR       EA16BIT             ONLY .W ALLOWED     -32K TO +64K
  1960.          MOVE.W    D5,D2
  1961.          BRA       CMMD2
  1962.  
  1963.  
  1964.          END